package cloud

import (
	"fmt"
	"github.com/astaxie/beego/logs"
	"github.com/astaxie/beego/orm"
	"smart_home/api/models"
	"smart_home/api/xfyun/depots"
)

func init() {
	registerCloud("comment_intent", comment_intent)
}

/*
我想留言
给主人留言
我要留言
我想给{person}留言
我要给{person}留言
给{person}留言
告诉{person}{content}
告诉主人{content}
*/
func comment_intent(rq *depots.Request, res *depots.XfyunResult, userParams *UserParams) {
	var (
		content, person *depots.RSlot
		err             error
		is              bool
		msg             string

		toUser = userParams.User // 默认是发给用户自己
		o      = orm.NewOrm()
	)

	// 是否已经指定留言内容
	if content = rq.GetSlot("content"); content == nil {
		res.Answer = "请问留言的内容"
		res.Slot = "content"
		return
	}

	msg = content.Value

	// 如果指定用户，则判断用户是否是自己的家人
	if person = rq.GetSlot("person"); person != nil {
		if toUser, err = models.GetUserByName(person.Value); err != nil || toUser == nil {
			logs.Error("comment_intent err:user_id error or user empty")
			return
		}
		// 判断用户是否为家人
		if is, err = models.IsMyFamily(toUser.Id, userParams.User.Id); err != nil || !is {
			res.Answer = person.Value + "还不是您的家人"
			return
		}
		msg = fmt.Sprintf("%s对您说:%s", userParams.User.NickName, content.Value)
	}

	// 开始事务
	o.Begin()
	if err := models.PushMessage(toUser.Id, msg, "message"); err != nil{
		logs.Error("comment_intent err:", err)
		o.Rollback()
		return
	}
	o.Commit()

	res.Answer = "留言成功"
}
